package com.cskaoyan.javase.conversion5.introduction1;

/**
 * @description: 什么是数据类型转换?
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * java是强类型语言,一般来说数据类型是不能轻易改变的,但也是可以改变的,需要做一些操作
 * 类型转换的定义: 我们把变量的数据类型由一种转换成另一种,这就叫做数据类型转换
 * int ---> double
 *
 * 1,正常情况下,基本数据类型和基本数据类型互相转换,引用数据类型和引用数据类型转换
 * 2,基本数据类型的类型转换:
 *      1,自动类型转换(隐式)
 *         什么是自动类型转换? 答:由编译器帮助我们自动转换类型,不需要程序员手动写代码
 *         什么时候发生自动类型转换? 答: 如果是数值类型,当小取值范围的数据类型转换为大取值范围的类型时,自动转换
 *          byte、short、char之间不互相转换，一旦之间发生运算，一律自动转换为int进行运算，结果是int
 * -        byte、short、char任一数据类型与int进行计算，一律自动转换为int进行计算，结果是int
 * -        byte、short、char、int任一数据类型与long进行计算，一律自动转换为long进行计算，结果是long
 * -        byte、short、char、int、long任一数据类型与float进行计算，一律自动转换为float进行计算，结果是float
 * -        byte、short、char、int、long、float任一数据类型与double进行计算，一律自动转换为double进行计算，结果是               double
 *
 *
 *      2,强制类型转换(显式)
 *         什么是强制类型转换? 答:编译器不帮我们,需要程序员手动写代码转换,如果你不手动写代码转换,它要编译报错.
 *
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //byte short char之间不能发生自动的互相转换 自动提升为int 可以强制转换



        byte b = 1;
        short s = 2;
        char c = 97; //如果char类型装的是数值,那就是编码值,打印的话输出字符
        long l = 100L;

        char c1 = 'a'; //如果一个字符参与运算,实际上参与运算的是编码值
        System.out.println(c);

        int value = b + s;
        int value2 = b + s + c;
        System.out.println(value + "--------" + value2);

        long value3 = b + s + c + l; //自动类型提升



    }
}
